package com.bailian.system.service;

import java.util.List;
import com.bailian.system.domain.BlWarehouse;
import com.bailian.system.domain.vo.BLWareHouseVo;
import com.bailian.system.domain.BlWarehouseType;

/**
 * 仓库基础信息Service接口
 * 
 * @author bailian
 * @date 2025-08-04
 */
public interface IBlWarehouseService 
{
    /**
     * 查询仓库基础信息
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 仓库基础信息
     */
    public BlWarehouse selectBlWarehouseByWarehouseId(Long warehouseId);

    /**
     * 查询仓库基础信息列表
     * 
     * @param blWarehouse 仓库基础信息
     * @return 仓库基础信息集合
     */
    public List<BlWarehouse> selectBlWarehouseList(BlWarehouse blWarehouse);

    /**
     * 查询仓库基础信息VO列表
     * 
     * @param blWarehouse 仓库基础信息
     * @return 仓库基础信息VO集合
     */
    public List<BLWareHouseVo> selectBlWarehouseVoList(BlWarehouse blWarehouse);

    /**
     * 根据ID查询仓库基础信息VO
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 仓库基础信息VO
     */
    public BLWareHouseVo selectBlWarehouseVoByWarehouseId(Long warehouseId);

    /**
     * 调试：查询仓库基础信息（不包含关联查询）
     * 
     * @param warehouseId 仓库ID
     * @return 仓库基础信息
     */
    public BlWarehouse selectWarehouseBasicInfo(Long warehouseId);

    /**
     * 调试：查询仓库类型信息
     * 
     * @param typeId 类型ID
     * @return 仓库类型信息
     */
    public BlWarehouseType selectWarehouseTypeInfo(Long typeId);

    /**
     * 新增仓库基础信息
     * 
     * @param blWarehouse 仓库基础信息
     * @return 结果
     */
    public int insertBlWarehouse(BlWarehouse blWarehouse);

    /**
     * 修改仓库基础信息
     * 
     * @param blWarehouse 仓库基础信息
     * @return 结果
     */
    public int updateBlWarehouse(BlWarehouse blWarehouse);

    /**
     * 批量删除仓库基础信息
     * 
     * @param warehouseIds 需要删除的仓库基础信息主键集合
     * @return 结果
     */
    public int deleteBlWarehouseByWarehouseIds(Long[] warehouseIds);

    /**
     * 删除仓库基础信息信息
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 结果
     */
    public int deleteBlWarehouseByWarehouseId(Long warehouseId);

    /**
     * 维护仓库-标签中间表（全量替换）。
     * @param warehouseId 仓库ID
     * @param tagIds 标签ID集合（可为空表示清空关系）
     */
    void replaceWarehouseTags(Long warehouseId, List<Long> tagIds);
}
